昨天做了一個 player 的物件範例
var player=new Object();
player.hp=100;
player.name="Abby";
player.fight=function(){
this.hp=this.hp-2;
}
player.rest=function(){
this.hp++;
}
player.report=function(){
alert(this.name+": "+this.hp)
}
這樣就可以製作的一個簡單的物件來放置一個玩家的資料
不過如果需要第二個玩家的資料的話,就又需要 new 一個 Object
var player2=new Object();
player2.hp=100;
player2.name="Jane";
player2.fight=function(){
this.hp=this.hp-2;
}
player2.rest=function(){
this.hp++;
}
player2.report=function(){
alert(this.name+": "+this.hp);
}
那有沒有比較方便的方法呢?
有!!
我們可以使用function
來建立建構式
function Player(){ // 建構式名稱習慣使用大寫,這是個命名習慣,方便讓其他人一看知道這是一個建構式
this.name="John";
this.hp=100;
this.fight=function(){
this.hp=this.hp-2;
}
this.rest=function(){
this.hp++;
}
this.report=function(){
alert(this.name+": "+this.hp);
}
}
接著我們就可以利用這個建構式來建立新的物件
var player=new Player();
並且這個新的物件一樣可以使用,我們設計的 fight 方法
player.fight();
player.rest();
player.report();
我們可以使用建構式建立其他新的的物件
並且這兩個物件互相不影響
var player=new Player();
player.fight();
player.rest();
player.report();
var player2=new Player();
player2.fight();
player2.repot();
player 會回報 "John: 99"
player2 會回報 "John: 98"
那我想要增加程式碼彈性,讓我可以不要每次建立新物件時,player.name 都是 john
可以使用參數
function Player(name,hp){ // 建構式名稱習慣使用大寫,這是個命名習慣,方便讓其他人一看知道這是一個建構式
this.name=name; // 參數會傳進這裡
this.hp=hp; // 參數會傳進這裡
this.fight=function(){
this.hp=this.hp-2;
}
this.rest=function(){
this.hp++;
}
this.report=function(){
alert(this.name+": "+this.hp);
}
}
增加參數 name 與 hp
修改 this.name="John" 為 this.name=name
修改 this.hp=100 為 this.hp=hp
這樣就修改好建構式
接著就是在建立新物件時,設定參數,決定玩家要叫什麼名子
var player=new Player("Bob",50);
var player2=new Player("abby",100);
player.fight();
player.report();
player2.fight();
player2.report();
這樣就完成使用建構式,快速建立新物件,並且可以給予彈性,利用參數讓每個物件有不同的屬性
這些新的物件在運作的時候以互相不會影響。